﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using SGAEntidades;
using System.Text;
using SGALogicaNegocio;

namespace webSGA
{
    public partial class wfLocal : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                lblUsuario.Text = Context.User.Identity.Name;
                Util.Util.CargarDepartamentos(cboDepartamento, true);
                Util.Util.CargarTipoLocal(cboTipoLocal, true);
                Util.Util.CargarTipoLocal(cboTipoLocalConsulta, true);
                Util.Util.CargarEstadoLocal(cboEstado, true);
                Util.Util.CargarTipoPropiedad(cboPropiedad, true);
                Util.Util.CargarTipoContacto(cboTipoContacto, true);
                hfAccion.Value = "N";
            }

        }

        protected void btnCerrarSesion_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut();
            Response.Redirect("Login.aspx");
        }

        protected void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            Util.Util.CargarProvincias(cboDepartamento, cboProvincia, cboDistrito, true);
        }

        protected void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            Util.Util.CargarDistritos(cboDepartamento, cboProvincia, cboDistrito, true);
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            ActivarDesactivarCampos(true);
            LimpiarCampos();

            hfAccion.Value = "N";
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            ActivarDesactivarCampos(true);

            hfAccion.Value = "M";
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            if (hfAccion.Value.Equals("N"))
            {
                LimpiarCampos();
            }
            else
            {
                ActivarDesactivarCampos(false);
            }
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                String sIdLocal = "";
                DateTime? dFechaInicio;
                if (!String.IsNullOrEmpty(txtFechaInicio.Text))
                    dFechaInicio = Convert.ToDateTime(txtFechaInicio.Text);
                else
                    dFechaInicio = null;


                DateTime? dFechaFin;
                if (!String.IsNullOrEmpty(txtFechaFin.Text))
                    dFechaFin = Convert.ToDateTime(txtFechaFin.Text);
                else
                    dFechaFin = null;

                
                if (hfAccion.Value.Equals("N"))
                {
                    var oEntLocal = new LocalInfo(null, txtDescripcion.Text, txtDireccion.Text,
                                              cboDepartamento.SelectedValue, null, cboProvincia.SelectedValue, null,
                                              cboDistrito.SelectedValue,
                                              null, dFechaInicio, dFechaFin, txtLocatario.Text, txtNombreContacto.Text,
                                              txtTelefonoContacto.Text, txtCelularContacto.Text,
                                              txtCorreoElectronico.Text,
                                              cboTipoLocal.SelectedValue, null, cboPropiedad.SelectedValue, null,
                                              cboEstado.SelectedValue, null, cboTipoContacto.SelectedValue, null,
                                              Context.User.Identity.Name);

                    if (new Local().Registrar(oEntLocal, ref sIdLocal))
                    {
                        Util.Util.AlternarMensaje(true, "Se registró el local con éxito.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        txtIdLocal.Text = sIdLocal;
                        ActivarDesactivarCampos(false);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se registró el local.", alertaError, alertaExito,
                                                  lblError, lblExito);
                    }
                }
                if (hfAccion.Value.Equals("M"))
                {
                    var oEntLocal = new LocalInfo(txtIdLocal.Text, txtDescripcion.Text, txtDireccion.Text,
                          cboDepartamento.SelectedValue, null, cboProvincia.SelectedValue, null,
                          cboDistrito.SelectedValue,
                          null, dFechaInicio, dFechaFin, txtLocatario.Text, txtNombreContacto.Text,
                          txtTelefonoContacto.Text, txtCelularContacto.Text,
                          txtCorreoElectronico.Text,
                          cboTipoLocal.SelectedValue, null, cboPropiedad.SelectedValue, null,
                          cboEstado.SelectedValue, null, cboTipoContacto.SelectedValue, null,
                          Context.User.Identity.Name);

                    if (new Local().Actualizar(oEntLocal))
                    {
                        Util.Util.AlternarMensaje(true, "Se actualizó el local con éxito.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        ActivarDesactivarCampos(false);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se actualizó el local.", alertaError, alertaExito,
                                                  lblError, lblExito);
                    }
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        protected void btnBuscarLocal_Click(object sender, EventArgs e)
        {
            cboTipoLocalConsulta.SelectedValue = "-1";
            gvConsultaLocal.DataSource = null;

            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConsultaLocal').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            String sIdLocalConsulta = String.IsNullOrEmpty(txtIdLocalConsulta.Text.Trim())
                                          ? null
                                          : txtIdLocalConsulta.Text.Trim();
            String sDescripcionConsulta = String.IsNullOrEmpty(txtDescripcionConsulta.Text.Trim())
                                          ? null
                                          : txtDescripcionConsulta.Text.Trim();
            String sTipoLocalConsulta = cboTipoLocalConsulta.Items.Count < 1 ||
                                        String.IsNullOrEmpty(cboTipoLocalConsulta.SelectedValue) ||
                                        cboTipoLocalConsulta.SelectedValue.Equals("-1")
                                            ? null
                                            : cboTipoLocalConsulta.SelectedValue;

            gvConsultaLocal.DataSource = new Local().Listar(new LocalInfo(sIdLocalConsulta, sDescripcionConsulta, sTipoLocalConsulta));
            gvConsultaLocal.DataBind();
        }

        protected void gvConsultaLocal_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaLocal.DataKeys[index];
                String sIdLocal = "";
                if (dataKey != null)
                {
                    sIdLocal = dataKey.Value.ToString();
                }
                if (e.CommandName.Equals("Seleccionar"))
                {
                    var oEntLocal = new LocalInfo(sIdLocal, null, null);
                    oEntLocal = new Local().Consultar(oEntLocal);

                    txtIdLocal.Text = oEntLocal.IdLocal;
                    txtDescripcion.Text = oEntLocal.Descripcion;
                    txtDireccion.Text = oEntLocal.Direccion;
                    cboDepartamento.SelectedValue = oEntLocal.IdDepartamento;

                    Util.Util.CargarProvincias(cboDepartamento, cboProvincia, cboDistrito, true);
                    cboProvincia.SelectedValue = oEntLocal.IdProvincia;

                    Util.Util.CargarDistritos(cboDepartamento, cboProvincia, cboDistrito, true);
                    cboDistrito.SelectedValue = oEntLocal.IdDistrito;

                    cboTipoLocal.SelectedValue = oEntLocal.IdTipoLocal;
                    cboEstado.SelectedValue = oEntLocal.IdEstadoLocal;
                    cboPropiedad.SelectedValue = oEntLocal.IdTipoPropiedad;

                    if (oEntLocal.FechaInicio != null) txtFechaInicio.Text = oEntLocal.FechaInicio.Value.ToShortDateString();
                    if (oEntLocal.FechaFin != null) txtFechaFin.Text = oEntLocal.FechaFin.Value.ToShortDateString();

                    txtLocatario.Text = oEntLocal.Locatario;
                    txtNombreContacto.Text = oEntLocal.NombreContacto;
                    cboTipoContacto.SelectedValue = oEntLocal.IdTipoContacto;
                    txtTelefonoContacto.Text = oEntLocal.TelefonoContacto;
                    txtCelularContacto.Text = oEntLocal.CelularContacto;
                    txtCorreoElectronico.Text = oEntLocal.CorreoContacto;

                    hfAccion.Value = "";

                    ActivarDesactivarCampos(false);

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalConsultaLocal').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }


            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }

        private void ActivarDesactivarCampos(Boolean bEstado)
        {
            txtDescripcion.Enabled = bEstado;
            txtDireccion.Enabled = bEstado;

            cboDepartamento.Enabled = bEstado;
            cboProvincia.Enabled = bEstado;
            cboDistrito.Enabled = bEstado;

            cboTipoLocal.Enabled = bEstado;
            cboEstado.Enabled = bEstado;
            cboPropiedad.Enabled = bEstado;
            cboTipoContacto.Enabled = bEstado;

            txtFechaInicio.Enabled = bEstado;
            txtFechaFin.Enabled = bEstado;
            txtLocatario.Enabled = bEstado;
            txtNombreContacto.Enabled = bEstado;
            txtTelefonoContacto.Enabled = bEstado;
            txtCelularContacto.Enabled = bEstado;
            txtCorreoElectronico.Enabled = bEstado;
        }

        private void LimpiarCampos()
        {
            txtIdLocal.Text = "";
            txtDescripcion.Text = "";
            txtDireccion.Text = "";
            cboDepartamento.SelectedValue = "-1";
            cboProvincia.Items.Clear();
            cboDistrito.Items.Clear();
            cboTipoLocal.SelectedValue = "-1";
            cboEstado.SelectedValue = "-1";
            cboPropiedad.SelectedValue = "-1";
            cboTipoContacto.SelectedValue = "-1";
            txtFechaInicio.Text = "";
            txtFechaFin.Text = "";
            txtLocatario.Text = "";
            txtNombreContacto.Text = "";
            txtTelefonoContacto.Text = "";
            txtCelularContacto.Text = "";
            txtCorreoElectronico.Text = "";
        }
    }
}